package com;
/*
 * @Author 罗俊
 * @date 2020/11/30 - 8:23 下午
 *
 */

import com.alibaba.fastjson.JSON;
import com.feign.ProductApi;
import feign.Feign;
import org.apache.http.client.HttpClient;

import java.util.HashMap;

public class FeignHttpApp {

    public static void main(String[] args) {

        /**
         * 1、target() 指定接口类型和URL地址返回接口Http代理对象，从而通过代理对象调用方法发送HTTP请求。
         * 除了target方法之外，还有一些可选方法。如下：
         *
         *
         * 2、client() Feign 在默认情况下使用的是 JDK 原生的 URLConnection 发送HTTP请求，通过client方法可配置其他HTTP客户端，如HttpClient、OkHttpClient、Http2Client等。
         *
         *
         * 3、options() 指定连接超时时长及响应超时时长，单位毫秒。
         *
         *
         * 4、retryer() 指定重试策略，参数分别是最小时间，最大时间，重连次数。
         *
         *
         * 5、encoder() decoder() 指定编码/解码方式默认是String，可配置Gson、Jackson、Sax等。
         *
         *
         * 6、logger() logLevel() 指定日志和日志等级，可配置SLF4J等。
         */
        ProductApi productApi = Feign.builder().target(ProductApi.class, "http://localhost:10000");
        String result = productApi.getSpuInfo(1, 10);
        System.out.println(result);

        HashMap<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("catalogId", 225);

        parameters.put("publishStatus", 1);

        String s = productApi.searchSpuByCondition(JSON.toJSONString(parameters), 1, 10);

        System.out.println(s);



    }

/*    void testMap(){
        LemonApi lemonApi = Feign.builder()
                //使用OkHttpClient作为HTTP请求客户端
                .client(new OkHttpClient())
                //1000ms连接超时、5000ms响应超时
                .options(new Options(1000, 5000))
                //基础重连时间500ms，最大重连时间5000ms，尝试重连次数3次（每次重连时间在基础上*1.5但不能大于最大重连时间）
                .retryer(new  Retryer.Default(500,5000,3))
                //使用Jackson编码和解码
                .encoder(new JacksonEncoder())
                .decoder(new JacksonDecoder())
                //使用Feign自带日志并输出到项目路径logs/http.log下
                .logger(new Logger.JavaLogger().appendToFile("logs/http.log"))
                //日志级别FULL，记录请求和响应所有信息。
                .logLevel(Logger.Level.FULL)
                //设置请求URL，对LemonApi接口创建HTTP代理类。
                .target(LemonApi.class, "http://localhost:8899");
//使用代理类发起HTTP请求
        String formGet = lemonApi.formGet("abc", "123");
    }*/
}
